/*
// space-objects.h
// Some classes for space objects such as planets, stars, asteroids, e.t.c.
//
// Distributed under terms of GNU GPLv3
//
// Coded by Lampus
*/

#ifndef SPACE_OBJECTS_H
#define SPACE_OBJECTS_H

class CSpaceObject
{
public:
	virtual			~CSpaceObject();

	virtual void	Process( float dt );

	void			SetPosition( double x, double y, double z );
	double			GetPositionX() const;
	double			GetPositionY() const;
	double			GetPositionZ() const;

	void			SetMass( double mass );
	double			GetMass() const;

protected:
					CSpaceObject();

private:
	double 			x, y, z;
	double			m_mass;
};

class CPlanet : public CSpaceObject
{
public:
			CPlanet();
	virtual	~CPlanet();

	void	SetRadius( double radius );
	double	GetRadius() const;

private:
	double	m_radius;
};

class CStar : public CPlanet
{
public:
			CStar();
	virtual	~CStar();

	void	SetSpectralClass( char spectral_class );
	char	GetSpectralClass() const;

	void	SetTemperature( float temperature );
	float	GetTemperature() const;

	void	SetLuminosity( double luminosity );
	double	GetLuminosity() const;

	void	SetAbsoluteValue( double absolute_value );
	double	GetAbsoluteValue() const;

private:
	char	m_spectralClass;
	float	m_temperature;
	double	m_luminosity;
	double	m_absoluteValue;
};

class CAsteroid : public CSpaceObject
{
public:
			CAsteroid();
	virtual	~CAsteroid();
};

class CComet : public CSpaceObject
{
public:
			CComet();
	virtual ~CComet();
};

#endif // SPACE_OBJECTS_H
